package ru.vt.simpleservlet.responsers;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import ru.vt.simpleservlet.data.AllData;
import ru.vt.simpleservlet.data.DataPosition;
import ru.vt.simpleservlet.data.DataVersion;
import ru.vt.simpleservlet.dbinterraction.Extractor;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

/**
 * Сервлет возвращает значение текущей версии базы в xml-response
 * @author Vit
 */
public class HttpVersionGetter extends HttpServlet {

    /**
     * Принимает запрос на версию данных и возвращает в виде xml последнюю версию
     * @param request Пришедший запрос с параметром, иначе ошибка 400
     * @param response Посылка сформированной xml с возможностью открыть в браузере
     * @throws ServletException
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{
        String versionParametr = (String) request.getParameter("version");
        if (versionParametr == null || versionParametr.equals("")) {
            try {
                response.sendError(400);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (versionParametr.equals("now")) {
            List<String> inlist=new ArrayList<String>();
            Extractor.extractVersions(inlist);
            ServletOutputStream stream = null;
            try {
                stream = response.getOutputStream();
                response.setContentType("text/xml");
                response.addHeader(
                        "Content-Disposition", "attachment; filename=INLfile");
                XStream xstream = new XStream(new DomDriver("UTF-8"));
                //xstream.alias("AllData", AllData.class);
                //шапка для xml-документа
                String xmlHead="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
                stream.write(xmlHead.getBytes(Charset.forName("UTF-8")));
                xstream.toXML(inlist, stream);
            } catch (IOException ioe) {
                try {
                    response.sendError(400);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } finally {
                if (stream != null)
                    try {
                        stream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
            }
        }
    }
   /*
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doGet(request, response);
    }
    */
}
